/**
 * 自定义容器工具包
 * 
 * @author Yisin
 */

function YList() {
	(function(yl) {
		yl.array = new Array();
		// 0：表示最新状态， 非0 表示有更改状态
		yl.status = 0;
		// 添加一项
		yl.add = function(obj) {
			if (obj != undefined) {
				yl.array.push(obj);
				yl.status++;
			} else {
				throw new Error('无效参数');
			}
			return yl;
		};
		// 刷新List,去除undefined和null
		yl.fush = function() {
			var len = yl.array.length;
			var temp = null;
			for ( var i = 0; i < len; i++) {
				for ( var j = i + 1; j < len; j++) {
					if (yl.array[i] == undefined || yl.array[i] == null) {
						temp = yl.array[i];
						yl.array[i] = yl.array[j];
						yl.array[j] = temp;
					}
				}
				;
			}
			;
			for ( var i = 0; i < len; i++) {
				if (yl.array[i] == undefined || yl.array[i] == null) {
					yl.array.length = i;
					break;
				}
			}
			yl.status = 0;
			return yl;
		};
		// 获取总数量
		yl.size = function() {
			if (yl.status > 0) {
				yl.fush();
				yl.status = 0;
			}
			return yl.array.length;
		};
		// 获取某一项值
		yl.get = function(index) {
			if (typeof (index) != 'number') {
				throw new Error('无效参数');
			} else if (index < 0 || index >= yl.array.length) {
				throw new Error('索引值超出范围');
			} else {
				return yl.array[index];
			}
		};
		// 移出某一项
		yl.remove = function(index) {
			if (typeof (index) != 'number') {
				throw new Error('无效参数');
			} else if (index < 0 || index >= yl.array.length) {
				throw new Error('索引值超出范围');
			} else {
				yl.array[index] = undefined;
				yl.status++;
			}
			return yl;
		};
		// 清空List
		yl.clear = function() {
			yl.array.length = 0;
			yl.status = 0;
			return yl;
		};
	})(this);
}

function YMap() {
	(function(ym) {
		var map = function(k, v) {
			this.key = k;
			this.value = v;
		};

		ym.list = new YList();
		// 获取总数量
		ym.size = function() {
			return ym.list.size();
		};
		// 往容器中填充对象
		ym.put = function(k, v) {
			if (k != undefined && k != null) {
				var mp = new map(k, v);
				ym.list.add(mp);
			} else {
				throw new Error('无效参数');
			}
			return ym;
		};

		// 移出某项
		ym.remove = function(k) {
			if (k != undefined && k != null) {
				for ( var i = 0; i < ym.list.size(); i++) {
					var mp = ym.list.get(i);
					if (mp != null && mp.key == k) {
						ym.list.remove(i);
						ym.list.fush();
					}
					;
				}
				;
			} else {
				throw new Error('无效参数');
			}
			return ym;
		};

		// 根据key值获取对象
		ym.get = function(k) {
			var result = null;
			if (k != undefined && k != null) {
				for ( var i = 0; i < ym.size(); i++) {
					var mp = ym.list.get(i);
					if (mp != null && mp.key == k) {
						result = mp.value;
						break;
					}
				}
			} else {
				throw new Error('无效参数');
			}
			return result;
		};
		// 移出所有项
		ym.removeAll = function() {
			ym.list.clear();
			return ym;
		};
		// 判断是否存在K项
		ym.contant = function(k) {
			var result = false;
			if (k != undefined && k != null) {
				for ( var i = 0; i < ym.size(); i++) {
					var mp = ym.list.get(i);
					if (mp != null && mp.key == k) {
						result = true;
						break;
					}
				}
			} else {
				throw new Error('无效参数');
			}
			return result;
		};
		// 获取到所有Key集合
		ym.keySet = function() {
			var arry = new Array();
			for ( var i = 0; i < ym.size(); i++) {
				var mp = ym.list.get(i);
				if (mp != undefined && mp != null) {
					arry.push(mp.key);
				}
			}
			return arry;
		};
		// 获取到所有value集合
		ym.valueSet = function() {
			var arry = new Array();
			for ( var i = 0; i < ym.size(); i++) {
				var mp = ym.list.get(i);
				if (mp != undefined && mp != null) {
					arry.push(mp.value);
				}
			}
			return arry;
		};
	})(this);
}

/****** 给数组Array增加自定义函数 *****/
/**
 * 判断数组是否包含某一值
 */
Array.prototype.contain = function(e) {  
	for(i = 0; i < this.length; i++){  
		if(this[i] == e) {
			return true;  
		}
	}  
	return false;  
};
